﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Collections;
using DS2171Utils;
using System.ComponentModel;

namespace DocManagerControls.Controls
{
    /// <summary>
    /// Logica di interazione per PaginatorControl.xaml
    /// </summary>
    public partial class PaginatorControl : UserControl
    {


        public PaginatorControl()
        {
            InitializeComponent();
        }

        //public static readonly DependencyProperty DatagridLinkedProperty = DependencyProperty.Register(
        //    "DatagridLinked", typeof(DataGrid), typeof(PaginatorControl), new PropertyMetadata(false));


        //public DataGrid DatagridLinked
        //{
        //    get { return (DataGrid)this.GetValue(DatagridLinkedProperty); }
        //    set { this.SetValue(DatagridLinkedProperty, value); }
        //}

        public ItemsControl DysplayerControl
        {
            get; set;
        }

        protected override void OnRender(DrawingContext drawingContext)
        {
            base.OnRender(drawingContext);
            RefreshPageIndicator();            
        }//fM        

        public IPaginator Paginatore { get; set; }

        private void RefreshPageIndicator()
        {
            txtBQuantePerPagina.Text = QuantielementiPerpagina.ToString();

            if (!setPaginator()) return;

            lblPageNumber.Text = string.Format("{0} di {1}",
                Paginatore.NumeroPagina, Paginatore.QuantePagine);
        }

        private bool setPaginator()
        {
            if (!DesignerProperties.GetIsInDesignMode(this))
            {
                if (DysplayerControl == null) return false;
                if (Paginatore == null)
                    Paginatore = DysplayerControl.ItemsSource as IPaginator;
            }

            return (Paginatore == null) ? false : true;
        }
               

        public int QuantielementiPerpagina { 
            get {
                    if (Paginatore == null) return 20;
                    return Paginatore.QuantielementiPerpagina ;
                }
            set {
                    if (Paginatore == null) return;
                    Paginatore.QuantielementiPerpagina = value ;
                }
        }

        public void  ImpostaPagina(int pNumPagina)
        {
            setPaginator();            
            Paginatore.DysplayerControl.EndInit();
            Paginatore.GetPaginaDati(pNumPagina);
            RefreshPageIndicator();
        }//fM

        #region Handlers

        private void btnFirst_Click(object sender, RoutedEventArgs e)
        {
            ImpostaPagina(1); 
        }

        private void btnNext_Click(object sender, RoutedEventArgs e)
        {
            if (Paginatore.NumeroPagina < 1) Paginatore.NumeroPagina = 2;
            ImpostaPagina(++Paginatore.NumeroPagina); 
        }

        private void btnLast_Click(object sender, RoutedEventArgs e)
        {
            Paginatore.NumeroPagina = Paginatore.QuantePagine;
            ImpostaPagina(Paginatore.NumeroPagina); 
        }

        private void btnPrev_Click(object sender, RoutedEventArgs e)
        {
            --Paginatore.NumeroPagina;
            if (Paginatore.NumeroPagina < 1) Paginatore.NumeroPagina = 1;
            ImpostaPagina(Paginatore.NumeroPagina); 
        }

        #endregion

        private void QuantiPerPageSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            QuantielementiPerpagina = (int)e.NewValue;
            if (txtBQuantePerPagina == null) return;
            txtBQuantePerPagina.Text = QuantielementiPerpagina.ToString();
            Paginatore.RicalcolaPagine = true;
           
        }


    }//fC
}
